package com.da.javatest.interview.other;

/**
 * wait方法是一个本地方法，其底层是通过一个叫做监视器锁的对象来完成的。
 * 所以上面之所以会抛出异常，是因为在调用wait方式时没有获取到monitor对象的所有权
 *
 * Synchronized的语义底层是通过一个monitor的对象来完成，其实wait/notify等方法也依赖于monitor对象，
 * 这就是为什么只有在同步的块或者方法中才能调用wait/notify等方法，否则会抛出java.lang.IllegalMonitorStateException的异常的原因。
 */
public class WaitTest {

    //public synchronized void testWait() {
    public void testWait() {
        System.out.println("Start-----");
        try {
            wait(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("End-------");
    }

    public static void main(String[] args) {
        final WaitTest test = new WaitTest();
        new Thread(() -> test.testWait()).start();
    }
}